package com.onlinemusic.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.onlinemusic.common.R;
import com.onlinemusic.pojo.domain.Song;
import com.onlinemusic.pojo.request.SongRequest;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

public interface SongService extends IService<Song> {

    /**
     * 增加歌曲
     * @param addSongRequest
     * @param mpfile
     * @return
     */
    R addSong(SongRequest addSongRequest, MultipartFile mpfile);

    /**
     * 更新歌曲信息
     * @param updateSongRequest
     * @return
     */
    R updateSongMsg(SongRequest updateSongRequest);

    /**
     * 更新歌曲链接也就是内容
     * @param urlFile
     * @param id
     * @return
     */
    R updateSongUrl(MultipartFile urlFile, int id);

    /**
     * 更新歌曲图片
     * @param urlFile
     * @param id
     * @return
     */
    R updateSongPic(MultipartFile urlFile, int id);

    /**
     * 删除歌曲
     * @param id
     * @return
     */
    R deleteSong(Integer id);

    /**
     * 获取指定歌手的歌曲
     * @param singerId
     * @return
     */
    R songOfSingerId(Integer singerId);

    /**
     * 根据songId获取数据 用于展示用户的收藏歌曲
     * @param id
     * @return
     */
    R songOfId(Integer id);

    /**
     * 获取所有的歌曲
     * @return
     */
    R allSong();

    /**
     * 根据歌手名查询歌曲
     * @param name
     * @return
     */
    R songOfSingerName(String name);

    List<Integer> getAllSongIds();

    R songOfSongListId(int songListId);

    /**
     * 判断歌曲是否支付
     * @param songId
     * @param userId
     * @return true 已购买歌曲
     */
    R isPay(Integer songId, Integer userId);

    /**
     * 本地下载歌曲
     * @param url
     * @return
     */
    void downloadSong(String url, HttpServletResponse response);
    /**
     * 下载歌曲
     * @param id
     * @return
     */
    R downloadSong(Integer id);

    /**
     * @Description: 根据用户id获取该用户的推荐歌曲列表
     **/
    R getRecommendSongList(Integer userId);
}
